啊哈,沒想到Kafka可以寫到第五篇啊...
今天要講的是ack,ack問題在stream computing裡也會遇到,這邊就來先提一下。
stream computing的ack還要解決多階段、數量大的ack管理,而Kafka的ack只要確保message deliver semantics。
分散式系統因為有透過網路,所以message deliver都是很難保證的。就像網路,有時候可以允許遺失封包 (UDP),如果不能遺失封包(TCP),就要有重送和檢查重複的機制。
對於Kafka的consumer來說,何時回送ack,就決定了message deliver semantics。
如果在資料收到、但還沒處理前就先送ack,由於機器可能在處理前掛掉,所以不能保證資料一定被處掉到,所以是at-most once semantics。
如果在資料收到且處理完後才送ack,由於機器可能在處理後、且送ack前掛掉,這樣就會重送已處理過的資料,所以是at-least once semantics。
而Apache Kafka現在還沒有內建支援exactly-once semantics。